package com.surfilter.msmp.web.es;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.index.query.QueryBuilder;

import java.util.List;
import java.util.Map;

/**
 * Description：describe this class function
 * Author；JinHuatao
 * Date: 2019/10/8 10:51
 */
public interface IIndex {

    /**
     * 插入单条数据, id自动生成
     * */
    void insertData(final String indexName, final Map<String, Object> sourceMap);

    /**
     * 插入单条数据, id自动生成
     * */
    void insertJsonData(final String indexName, final String sourceJson);

    /**
     * 指定id，插入单条数据（更新文档）
     * */
    boolean insertData(final String indexName, final Map<String, Object> sourceMap, final String id);

    /**
     * 指定id，插入单条数据（更新文档）
     * */
    boolean insertJsonData(final String indexName, final String sourceJson, final String id);

    /**
     * 批量插入数据
     * */
    void batchInsertData(final String indexName, final Map<String, Map<String, Object>> sourceMap);

    /**
     * 批量插入数据
     * */
    void batchInsertData(final String indexName, final List<Map<String, Object>> sourceList);


    /**
     * 根据条件删除索引
     * */
    void deleteByQuery(final String indexName, final QueryBuilder query);

    /**
     * 删除索引文档
     * */
    void deleteIndexDoc(final String indexName, final String id);


    /**
     * 删除索引相同文档
     * */
    void deleteIndexDoc(final String indexName, final List<String> ids);


    /**
     * 优化索引
     * */
    void optimize(final String indexName);


    /**
     * 判断索引是否存在
     * */
    boolean indexExists(String indexName);

    /**
     * 创建索引
     * */
    boolean createIndex(final String indexName, final int shards, final int replicas);

    /**
     * 创建索引
     * */
    boolean createIndex(String indexName, final XContentBuilder mapping);

    /**
     * 创建索引
     * */
    boolean createIndex(final String indexName, Map<String, Object> properties);

    /**
     * 修改索引Refresh_Interval参数
     * */
    boolean updateIndexRefreshInterval(final String indexName, final int interval);

    /**
     * 修改索引分片，副本数
     * */
    boolean updateIndexRepliceas(final String indexName, final int repliceas);

    /**
     * 创建索引别名
     * */
    boolean createIndexAliasName(final String indexName, final String aliasName);


    /**
     * 移除索引别名
     * */
    boolean removeAlias(final String indexName, final String aliasName);

    /**
     * 修改索引别名
     * */
    boolean changeAlias(final String srcIndexName, final String destIndexName, final String indexAlias);

    /**
     * 关闭指定索引
     * */
    boolean closeIndex(final String indexName);

    /**
     * 打开指定索引
     * */
    boolean openIndex(final String indexName);

    /**
     * 删除指定索引
     * */
    boolean deleteIndex(final String indexName);

    /**
     * 刷新索引
     * */
    void flushIndex(final String indexName);

    /**
     * 扫描指定索引
     * */
    SearchResponse prepareSearch(final String indexName, final long scrollTime, final int limit);

    /**
     * 滚动式获取数据
     * */
    SearchResponse searchScroll(final String scrollId, final long scrollTime);
}
